package iks.utils 
{
	import flash.utils.*;
	
	/**
	 * 属性集, 从字符串中加载, 每个键及其对应的值都是一个字符串
	 * @author StefanieKaka
	 */
	public final class Properties 
	{
		/**
		 * 构造函数, 根据字符串变量构造属性列表, 字符串的格式与Java.util.Properties相同
		 * @param	text 字符串
		 */
		public function Properties(text : String)
		{
			m_keyValues = new Dictionary();
			analysis(text);
		}
		
		/**
		 * 用指定的键在此属性列表中搜索属性
		 * @param	key 键
		 * @return 键对应的值, 如果不存在返回null
		 */
		public function getProperty(key : String) : String
		{
			return m_keyValues[key];
		}
		
		/**
		 * 得到键集的数组
		 * @return 属性列表键集的数组
		 */
		public function getKeys() : Vector.<String>
		{
			var keys : Vector.<String> = new Vector.<String>();
			for (var key : String in m_keyValues)
				keys.push(key);
				
			return keys;
		}
		
///////////////////////////////////////////////////////////////////////////////////////////////////
// 私有域
///////////////////////////////////////////////////////////////////////////////////////////////////
		
		/// 解析文本
		private function analysis(text : String) : void
		{
			var sections : Array = text.split("\n");
			for each (var section : String in sections)
				analysisSection(section);
		}
		
		/// 解析每一段
		private function analysisSection(section : String) : void
		{
			if (section.charAt(0) == "#")
				return;
				
			var index : int = section.indexOf("=");
			if (index == -1)
				return;
			
			// 删除首位空格
			var key : String = section.slice(0, index).replace(/(^\s*)|(\s*$)/g, "");
			var value : String = section.slice(index + 1, section.lastIndexOf("\n")).replace(/(^\s*)|(\s*$)/g, "");
			m_keyValues[key] = value;
		}
		
		private var m_keyValues : Dictionary = null;
		
	}

}